#include <iostream>
#include <string>

using namespace std;

/*
调用父类的有参构造
    需要再子类的构造函数中 显性的调用 父类 构造函数

如果子类没有显性调用
    则 父类会自动调用 自己的无参构造  <父类必须有无参构造 否则会报错>
调用顺序
    有参构造 先进行父类 构造函数 再进行 子类构造函数
    无参构造 先进行父类 构造函数 再进行 子类构造函数
*/

class person
{
public:
    int A;
protected:
    int B;
private:
    int C;
public:
    person()
    {
        cout << "基类 空 构造" << endl;
    }
    person(int A,int B,int C):A(A),B(B),C(C)
    {
        cout << "基类 有参 构造" << endl;
    }
    ~person(){}

    void set_C(int c)
    {
        this->C = c;
    }
};

class student : private person
{
public:
    int D;
    int E;
public:
    student()
    {
        cout << "派生类 空 构造" << endl;
    }
    student(int A,int B,int C,int D,int E):person(A,B,C),D(D),E(E)
    {
        cout << "派生类 有参 构造" << endl;
    }
    ~student(){}
};

int main(int argc, char const *argv[])
{
    student s1(10,20,30,40,50);
    
    return 0;
}
